# hw definition file for processing by chibios_pins.py

# MCU class and specific type defined by concrete hwdef.dat

FLASH_RESERVE_START_KB 4

# crystal frequency
OSCILLATOR_HZ 24000000

# Use tickless mode
define CH_CFG_ST_FREQUENCY 1000
define CH_CFG_ST_TIMEDELTA 0

FLASH_SIZE_KB 64

# order of UARTs
SERIAL_ORDER EMPTY EMPTY EMPTY EMPTY
define HAL_USE_UART TRUE

# UART connected to FMU, uses DMA
PA2 USART2_TX USART2 SPEED_HIGH
PA3 USART2_RX USART2 SPEED_HIGH

define STM32_UART_USE_USART1 FALSE
define STM32_UART_USE_USART2 TRUE
define STM32_UART_USE_USART3 FALSE

# UART for SBUS out, and RC in, no DMA
define HAL_USE_SERIAL TRUE
PB4 SBUS_OUT_EN OUTPUT LOW GPIO(1)
PB10 USART3_TX USART3 SPEED_HIGH LOW
PB11 USART3_RX USART3

define STM32_SERIAL_USE_USART1 TRUE
define STM32_SERIAL_USE_USART2 FALSE
define STM32_SERIAL_USE_USART3 TRUE

PA0 TIM2_CH1 TIM2 PWM(1) GPIO(101)
PA1 TIM2_CH2 TIM2 PWM(2) GPIO(102)
PB8 TIM4_CH3 TIM4 PWM(3) GPIO(103)
PB9 TIM4_CH4 TIM4 PWM(4) GPIO(104)
PA6 TIM3_CH1 TIM3 PWM(5) GPIO(105)
PA7 TIM3_CH2 TIM3 PWM(6) GPIO(106)
PB0 TIM3_CH3 TIM3 PWM(7) GPIO(107)
PB1 TIM3_CH4 TIM3 PWM(8) GPIO(108)

# pins for detecting board type. On a pixhawk2 PC14 is pulled high,
# PC15 is pulled low. On a Pixhawk1 they are both floating
PC14 IO_HW_DETECT1 INPUT PULLDOWN 
PC15 IO_HW_DETECT2 INPUT PULLUP   

PB14 HEATER INPUT PULLUP GPIO(0)

# safety button and LED. These do not use the same names
# as those for FMU-only boards as we want to handle them specially
# inside the iofirmware
PB5 SAFETY_INPUT INPUT PULLDOWN
PB13 SAFETY_LED OUTPUT HIGH OPENDRAIN

# amber LED
PB15 AMBER_LED OUTPUT LOW OPENDRAIN

# green ring LED on cube
PA11 RING_LED OUTPUT LOW OPENDRAIN

# UART for DSM input
# TX side is for IO debug, and is unused
PA9  USART1_TX USART1 SPEED_HIGH
PA10 USART1_RX USART1 SPEED_HIGH

PC13 SPEKTRUM_PWR_EN OUTPUT LOW
define HAL_GPIO_PIN_SPEKTRUM_OUT PAL_LINE(GPIOA,10U)

PA8 RCIN INPUT SPEED_HIGH PULLDOWN # RC Input PPM

# analog inputs
PA4 VSERVO ADC1
PA5 VRSSI  ADC1
define HAL_USE_ADC TRUE
define STM32_ADC_USE_ADC1 TRUE
define HAL_DISABLE_ADC_DRIVER TRUE

#Manually define ICU settings
define HAL_USE_ICU TRUE
define STM32_ICU_USE_TIM1 TRUE
define RCIN_ICU_TIMER ICUD1
define RCIN_ICU_CHANNEL ICU_CHANNEL_1
define STM32_RCIN_DMA_STREAM STM32_DMA_STREAM_ID(1, 2)

#DMA Channel Not relevant for F1 series
define STM32_RCIN_DMA_CHANNEL 0

define HAL_USE_EMPTY_STORAGE 1
define HAL_STORAGE_SIZE 16384

define HAL_INS_DEFAULT HAL_INS_NONE
#define CH_CFG_USE_DYNAMIC FALSE
define SERIAL_BUFFERS_SIZE 32
define HAL_USE_EMPTY_IO TRUE
define PORT_INT_REQUIRED_STACK 64

# avoid timer threads to save memory
define HAL_NO_TIMER_THREAD
define HAL_NO_RCOUT_THREAD  # also disables LED thread

define AP_HAL_SHARED_DMA_ENABLED 0

#defined to turn off undef warnings
define __FPU_PRESENT 0

define HAL_NO_FLASH_SUPPORT TRUE
define AP_HAL_UARTDRIVER_ENABLED 0
define HAL_LOGGING_ENABLED 0

define DMA_RESERVE_SIZE 0

# reduce memory usage in RCInput
define SOFTSIG_MAX_SIGNAL_TRANSITIONS 128

define IOMCU_FW TRUE
define AP_FASTBOOT_ENABLED 0
IOMCU_FW 1

# ChibiOS already correctly sets stack sizes and considers 64 extra as conservative
undef PORT_INT_REQUIRED_STACK
define PORT_INT_REQUIRED_STACK 64

# "main" stack is only used for exceptions and ISR, but they can be nested
MAIN_STACK 0x180
PROCESS_STACK 0x250

define AP_BOOTLOADER_FLASHING_ENABLED 0

define AP_RCPROTOCOL_BACKEND_DEFAULT_ENABLED 0
define AP_RCPROTOCOL_PPMSUM_ENABLED 1
define AP_RCPROTOCOL_IBUS_ENABLED 1
define AP_RCPROTOCOL_SBUS_ENABLED 1
define AP_RCPROTOCOL_DSM_ENABLED 1
define AP_RCPROTOCOL_SUMD_ENABLED 1
define AP_RCPROTOCOL_SRXL_ENABLED 1
define AP_RCPROTOCOL_ST24_ENABLED 1
define AP_RCPROTOCOL_FPORT_ENABLED 1

AUTOBUILD_TARGETS iofirmware

define HAL_DSHOT_ENABLED 0
define CH_DBG_ENABLE_STACK_CHECK 0
